#include <iostream>

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"


class OneLoop {
public:
//    std::unordered_map<int,char> node_appear;
    bool run(
            uint64_t n,uint64_t k,uint64_t T
//            std::string&s1,std::string& s2
    ) {
        //n人 k归0 T第一个人说了多少次，终止条件
        int last_bs=1;
        uint64_t sum=0;
        for(uint64_t i=0;i<T;i++){
            uint64_t ii=i*n;
            sum+=((1+ii)*ii/2+1)%k;
        }
//        for(int i=0;i<(T-1)*n+1;i++){
//            //轮流报数
//            int cur_bs=last_bs+i;
//            last_bs=cur_bs;
//            if(last_bs>k){
//                last_bs%=k;
//            }
//            if(i%n==0){
//                sum+=last_bs;
//            }
//        }
        printf("%lld\n",sum);
        return false;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int a, b, c, d, e;
        //        std::cin >> a;
//        std::string s1,s2;
//        while (1){
        while (
//                std::getline(std::cin,s1)
                std::cin >> a>>b>>c
//                1
                ) {
//            std::getline(std::cin,s2);
            OneLoop l;
            if (!l.run(a,b,c)) {
//                return;
            }
        }


    }
};

int main() {

    //    bool cur_num= true;
    Solution().run();
    return 0;
}

